function A406()
format long;

% 聚类分析
% 聚类将样本集D划分为若干互不相交的子集（样本）。   
% 两个特征（比如A-Scan的最大值和均方根）  
numSamples = 150; 
data1 = xlsread('A4_data_single.xlsx'); % 加载数据  
data2 = xlsread('A4_data_double.xlsx'); 
data3 = xlsread('A4_data_void.xlsx');

% 计算 data1 的特征  
a1 = mean(data1(:, 150)); % 计算平均值  
m1 = max(data1(:, 150)); % 获取最大值  
s1 = sqrt(mean(data1(:, 150).^2)); % 计算均方根  

% 计算 data2 的特征  
a2 = mean(data2(:, 150)); % 计算平均值  
m2 = max(data2(:, 150)); % 获取最大值  
s2 = sqrt(mean(data2(:, 150).^2)); % 计算均方根  

% 计算 data3 的特征  
a3 = mean(data3(:, 2)); % 计算平均值  
m3 = max(data3(:, 2)); % 获取最大值  
s3 = sqrt(mean(data3(:, 2).^2)); % 计算均方根  

% 生成第一个图形 - data1 和 data2 的分类
figure('Name', '失败案例');
X1 = [randn(numSamples, 1) * 0.5 + s1, randn(numSamples, 1) * 0.5 + m1; % 单排钢筋  
      randn(numSamples, 1) * 0.5 + s2, randn(numSamples, 1) * 0.5 + m2]; % 双排钢筋  
Y1 = [repmat({'rebar'}, numSamples, 1); repmat({'double rebar'}, numSamples, 1)];   

tabulate(Y1); % 显示标签的分布 
subplot(2, 2, 1)
gscatter(X1(:, 1), X1(:, 2), Y1);
title('原始数据分布');

% 使用 k-means 进行二分类
k = 2; % 二分类
[idx1, C1] = kmeans(X1, k); % K-means 聚类

% 可视化聚类结果
subplot(2, 2, 2);
gscatter(X1(:, 1), X1(:, 2), idx1);
title('K-means 聚类');

% 使用光谱聚类
idx1 = spectralcluster(X1, 2);
% 可视化聚类分析的结果。
subplot(2, 2, 3);
gscatter(X1(:, 1), X1(:, 2), idx1);
title('光谱聚类'); 

% 使用半径搜索相似性图进行聚类
idx1 = spectralcluster(X1, 2, 'SimilarityGraph', 'epsilon', 'Radius', 2);
% 可视化聚类分析的结果。
subplot(2, 2, 4);
gscatter(X1(:, 1), X1(:, 2), idx1);
title('基于半径的相似图聚类');

% 生成第二个图形 - data1 和 data3 的分类
figure('Name', '成功案例');
X2 = [randn(numSamples, 1) * 0.5 + s1, randn(numSamples, 1) * 0.5 + m1; % 单排钢筋  
      randn(numSamples, 1) * 0.5 + s3, randn(numSamples, 1) * 0.5 + m3]; % 空洞  
Y2 = [repmat({'rebar'}, numSamples, 1); repmat({'void'}, numSamples, 1)];   

tabulate(Y2); % 显示标签的分布
% 可视化生成的数据
subplot(2, 2, 1)
gscatter(X2(:, 1), X2(:, 2), Y2);
title('原始数据分布');

% 使用 k-means 进行二分类
k = 2; % 二分类
[idx2, C2] = kmeans(X2, k); % K-means 聚类

% 可视化聚类结果
subplot(2, 2, 2);
gscatter(X2(:, 1), X2(:, 2), idx2);
title('K-means 聚类');

% 使用光谱聚类
idx2 = spectralcluster(X2, 2);
% 可视化聚类分析的结果。
subplot(2, 2, 3);
gscatter(X2(:, 1), X2(:, 2), idx2);
title('光谱聚类'); 

% 使用半径搜索相似性图进行聚类
idx2 = spectralcluster(X2, 2, 'SimilarityGraph', 'epsilon', 'Radius', 2);
% 可视化聚类分析的结果。
subplot(2, 2, 4);
gscatter(X2(:, 1), X2(:, 2), idx2);
title('基于半径的相似图聚类');

end